package com.tieshan.smartwindow.other.pisutil

import android.os.Parcel
import android.os.Parcelable

/**
 * author : Hleo
 * time   : 2022/2/10
 * desc   : UDP解析的数据
 */
class UDPData() {
    //协议头
    var header: ByteArray? = null

    //消息发送次数计数值
    var times: ByteArray? = null

    //发送设备或单元的IP地址，取最后两个字节
    var ipSend: ByteArray? = null

    //接收设备或单元的IP地址，取最后两个字节
    var ipReceive: ByteArray? = null

    //消息类型  00 为轮询，01 为数据，FF 为复位
    var msgType: Byte? = null

    //功能码
    var functionCode: ByteArray? = null

    //负载数据长度包含的字节数，占用两个字节，高字节在低位
    var dataLength: ByteArray? = null

    //负载数据
    var data: ByteArray? = null

    //CRC16 校验的高 8 位
    var crcHigh: Byte? = null

    //CRC16 校验的低 8 位
    var crcLow: Byte? = null

    //协议尾
    var tail: ByteArray? = null

    //全部协议数据
    var allByte: ByteArray? = null

    //心跳数据
    var heart: HeartData? = null

    //中文站点
    var cnStationList: ArrayList<CnStationBean>? = null

    //英文站点
    var enStationList: ArrayList<EnStationBean>? = null

    //位置状态
    var location: TrainLocationData?=null

    //时间速度温度信息
    var timeSpeed: TimeSpeedData?=null

    //文本显示信息
    var textInfo: TextData?=null
    //车次信息
    var carnumberInfo: CarnumberData?=null

    //是否重启
    var isReboot=false





    //心跳数据
    class HeartData() :Parcelable{
        //激活状态  0表示没激活  1表示头车激活  2表示尾车激活   3表示都激活
        var jihuoCode = 0

        //车厢拥挤度   1表示单列   2表示重联主前   3表示重联主后   4表示重联从后
        var bianZu=0



        constructor(parcel: Parcel) : this() {
            jihuoCode = parcel.readInt()
            bianZu = parcel.readInt()

        }

        override fun writeToParcel(parcel: Parcel, flags: Int) {
            parcel.writeInt(jihuoCode)
            parcel.writeInt(bianZu)
        }

        override fun describeContents(): Int {
            return 0
        }

        companion object CREATOR : Parcelable.Creator<HeartData> {
            override fun createFromParcel(parcel: Parcel): HeartData {
                return HeartData(parcel)
            }

            override fun newArray(size: Int): Array<HeartData?> {
                return arrayOfNulls(size)
            }
        }
    }

    //中文站点名称及id
    class EnStationBean() :Parcelable{
        //  站点id
        var id = 0
        //站点名称
        var staionName=""



        constructor(parcel: Parcel) : this() {
            id = parcel.readInt()
            staionName = parcel.readString()!!
        }

        override fun writeToParcel(parcel: Parcel, flags: Int) {
            parcel.writeInt(id)
            parcel.writeString(staionName)
        }

        override fun describeContents(): Int {
            return 0
        }

        companion object CREATOR : Parcelable.Creator<EnStationBean> {
            override fun createFromParcel(parcel: Parcel): EnStationBean {
                return EnStationBean(parcel)
            }

            override fun newArray(size: Int): Array<EnStationBean?> {
                return arrayOfNulls(size)
            }
        }
    }


    //中文站点名称及id
    class CnStationBean() :Parcelable{
        //  站点id
        var id = 0
        //站点名称
        var staionName=""

        constructor(parcel: Parcel) : this() {
            id = parcel.readInt()
            staionName = parcel.readString()!!
        }

        override fun writeToParcel(parcel: Parcel, flags: Int) {
            parcel.writeInt(id)
            parcel.writeString(staionName)
        }

        override fun describeContents(): Int {
            return 0
        }

        companion object CREATOR : Parcelable.Creator<CnStationBean> {
            override fun createFromParcel(parcel: Parcel): CnStationBean {
                return CnStationBean(parcel)
            }

            override fun newArray(size: Int): Array<CnStationBean?> {
                return arrayOfNulls(size)
            }
        }
    }

    //列车位置
    class TrainLocationData() :Parcelable{
        //  列车状态，取值为 01 表示离报，02 表示途中，03 表示预报，04 表示到站,05表示终点站
        var status = 0

        //终点站ID
        var endLocationId = 0

        //起始站ID
        var startLocationId = 0

        //当前站ID
        var nowLocationId = 0

        //下一站ID
        var nextLocationId = 0

        //下一站开门位置  开门信息，00 表示下一站关门，01 表示下一站开左侧门，02 表示下一站开右侧门， 03 表示下一站开双侧门
        var nextStationDoorPostion = 0

        // 上下行，取值为 01 表示上行，00 表示
        var updown = 0

        //距离下一站距离
        var nextStationDistance = 0

        //已经行驶的距离
        var leaveStationDistance = 0

        //越站数量N
        var overstepNum = 0

        //越站id集合
        var overstepIds: ArrayList<Int>? = null

        //车厢数量
        var trainBoxnum = 0

        constructor(parcel: Parcel) : this() {
            status = parcel.readInt()
            endLocationId = parcel.readInt()
            startLocationId = parcel.readInt()
            nowLocationId = parcel.readInt()
            nextLocationId = parcel.readInt()
            nextStationDoorPostion = parcel.readInt()
            updown = parcel.readInt()
            nextStationDistance = parcel.readInt()
            leaveStationDistance = parcel.readInt()
            overstepNum = parcel.readInt()
            trainBoxnum = parcel.readInt()
        }

        override fun writeToParcel(parcel: Parcel, flags: Int) {
            parcel.writeInt(status)
            parcel.writeInt(endLocationId)
            parcel.writeInt(startLocationId)
            parcel.writeInt(nowLocationId)
            parcel.writeInt(nextLocationId)
            parcel.writeInt(nextStationDoorPostion)
            parcel.writeInt(updown)
            parcel.writeInt(nextStationDistance)
            parcel.writeInt(leaveStationDistance)
            parcel.writeInt(overstepNum)
            parcel.writeInt(trainBoxnum)
        }

        override fun describeContents(): Int {
            return 0
        }

        companion object CREATOR : Parcelable.Creator<TrainLocationData> {
            override fun createFromParcel(parcel: Parcel): TrainLocationData {
                return TrainLocationData(parcel)
            }

            override fun newArray(size: Int): Array<TrainLocationData?> {
                return arrayOfNulls(size)
            }
        }

    }

    //时间速度显示信息
    class TimeSpeedData() :Parcelable{
        //年
        var year = 0

        //月
        var month = 0

        //日
        var day = 0

        //时
        var hour = 0

        //分
        var min = 0

        //秒
        var sec = 0

        //速度
        var speed = 0

        //外温
        var outTem = 0

        //内温
        var inTem :ArrayList<Int> ?=null

        constructor(parcel: Parcel) : this() {
            year = parcel.readInt()
            month = parcel.readInt()
            day = parcel.readInt()
            hour = parcel.readInt()
            min = parcel.readInt()
            sec = parcel.readInt()
            speed = parcel.readInt()
            outTem = parcel.readInt()
        }

        override fun writeToParcel(parcel: Parcel, flags: Int) {
            parcel.writeInt(year)
            parcel.writeInt(month)
            parcel.writeInt(day)
            parcel.writeInt(hour)
            parcel.writeInt(min)
            parcel.writeInt(sec)
            parcel.writeInt(speed)
            parcel.writeInt(outTem)
        }

        override fun describeContents(): Int {
            return 0
        }

        companion object CREATOR : Parcelable.Creator<TimeSpeedData> {
            override fun createFromParcel(parcel: Parcel): TimeSpeedData {
                return TimeSpeedData(parcel)
            }

            override fun newArray(size: Int): Array<TimeSpeedData?> {
                return arrayOfNulls(size)
            }
        }
    }

    //文本信息显示
    class TextData() :Parcelable{
        //是否紧急
        var isUrgent = false

        //是否为中文
        var isCn = false

        //字节
        var content = ""

        constructor(parcel: Parcel) : this() {
            isUrgent = parcel.readByte() != 0.toByte()
            isCn = parcel.readByte() != 0.toByte()
            content = parcel.readString()!!
        }

        override fun writeToParcel(parcel: Parcel, flags: Int) {
            parcel.writeByte(if (isUrgent) 1 else 0)
            parcel.writeByte(if (isCn) 1 else 0)
            parcel.writeString(content)
        }

        override fun describeContents(): Int {
            return 0
        }

        companion object CREATOR : Parcelable.Creator<TextData> {
            override fun createFromParcel(parcel: Parcel): TextData {
                return TextData(parcel)
            }

            override fun newArray(size: Int): Array<TextData?> {
                return arrayOfNulls(size)
            }
        }

    }

    class CarnumberData():Parcelable{
        //数据是否加密
        var isJiami = false

        //测试模式
        var isTest = false

        //临时车次
        var isTemoNumber = false
        //字节长度
        var textLong=0
        //车次信息
        var carNumber=""

        constructor(parcel: Parcel) : this() {
            isJiami = parcel.readByte() != 0.toByte()
            isTest = parcel.readByte() != 0.toByte()
            isTemoNumber = parcel.readByte() != 0.toByte()
            textLong = parcel.readInt()
            carNumber = parcel.readString()!!
        }

        override fun writeToParcel(parcel: Parcel, flags: Int) {
            parcel.writeByte(if (isJiami) 1 else 0)
            parcel.writeByte(if (isTest) 1 else 0)
            parcel.writeByte(if (isTemoNumber) 1 else 0)
            parcel.writeInt(textLong)
            parcel.writeString(carNumber)
        }

        override fun describeContents(): Int {
            return 0
        }

        companion object CREATOR : Parcelable.Creator<CarnumberData> {
            override fun createFromParcel(parcel: Parcel): CarnumberData {
                return CarnumberData(parcel)
            }

            override fun newArray(size: Int): Array<CarnumberData?> {
                return arrayOfNulls(size)
            }
        }


    }

}